package RRHH_MODELO;

import Conexion.Conexion;
import RRHH_MODELO.StringMD;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

public class RHH_POSTULADO {

    private int ID;
    private int ID_PERSONA;
    private String PASSWORD;
    private Conexion con = null;

    public RHH_POSTULADO(Conexion con) {
        this.con = con;
    }

    public RHH_POSTULADO(int ID, int ID_PERSONA, String PASSWORD) {
        this.ID = ID;
        this.ID_PERSONA = ID_PERSONA;
        this.PASSWORD = PASSWORD;
    }

    public int Insertar() throws SQLException {
        String PASSWORD2 = StringMD.getStringMessageDigest(PASSWORD, StringMD.SHA512);
        String consulta = "insert into BROKER.RHH_POSTULADO (ID, ID_PERSONA, PASSWORD) VALUES (" + ID + "," + ID_PERSONA + ",'" + PASSWORD2 + "')";
        con.EjecutarSentencia(consulta);
        consulta = "select BROKER.RHH_POSTULADO_SEQ.currval as ID from dual";
        ResultSet rs = con.EjecutarConsulta(consulta);
        rs.next();
        return rs.getInt("ID");
    }
    
    public boolean verificarPass(String pass) throws SQLException {
        String PASSWORD2 = StringMD.getStringMessageDigest(pass, StringMD.SHA512);
        if(PASSWORD2.equals(PASSWORD))
            return true;
        else
            return false;
    }
    
    public boolean cambiarPass(String pass) throws SQLException {
        String PASSWORD2 = StringMD.getStringMessageDigest(pass, StringMD.SHA512);
        String consulta = "update BROKER.RHH_POSTULADO set PASSWORD = '"+PASSWORD2+"' where ID = "+getID();
        con.EjecutarSentencia(consulta);
        return true;
    }

    public boolean EliminarXid() throws SQLException {                
        new RHH_POSTULADO_CONVOCATORIA(con).EliminarXPostulado(getID());
        String consulta = "delete from BROKER.RHH_POSTULADO where ID= " + getID();
        con.EjecutarSentencia(consulta);
        RHH_PERSONA per = new RHH_PERSONA(con).Buscar(getID_PERSONA());
        return per.EliminarXid();
    }

    public List<RHH_POSTULADO> Todos() throws SQLException {
        String consulta = "select * from BROKER.RHH_POSTULADO";
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_POSTULADO> lista = Cargar(rs);
        return lista;
    }
    public RHH_POSTULADO BuscarXid(int id) throws SQLException {
        String consulta = "select * from BROKER.RHH_POSTULADO where ID = "+id;
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_POSTULADO> lista = Cargar(rs);
        if(lista.size()>0)
            return lista.get(0);
        else
            return null;
    }
    public RHH_POSTULADO BuscarXPersona(int idpersona) throws SQLException {
        String consulta = "select * from BROKER.RHH_POSTULADO where ID_PERSONA = "+idpersona;
        ResultSet rs = con.EjecutarConsulta(consulta);
        List<RHH_POSTULADO> lista = Cargar(rs);
        if(lista.size()>0)
            return lista.get(0);
        else
            return null;
    }
    public List<RHH_POSTULADO> BuscarEnConvocatoria(double id_convocatoria) throws SQLException{
        String consulta = "select p.* from BROKER.RHH_POSTULADO_CONVOCATORIA pc, BROKER.RHH_POSTULADO p where pc.ID_POSTULADO = p.ID and pc.ID_CONVOCATORIA ="+id_convocatoria;
        ResultSet rs = con.EjecutarConsulta(consulta);            
        return Cargar(rs);
    }
    public List<RHH_POSTULADO> BuscarSinLaConvocatoria(double id_convocatoria) throws SQLException{
        String consulta = "select * from BROKER.RHH_POSTULADO pos where pos.ID not in (select p.ID from BROKER.RHH_POSTULADO_CONVOCATORIA pc, BROKER.RHH_POSTULADO p where pc.ID_POSTULADO = p.ID and pc.ID_CONVOCATORIA ="+id_convocatoria+")";
        ResultSet rs = con.EjecutarConsulta(consulta);            
        return Cargar(rs);
    }

    public List<RHH_POSTULADO> Cargar(ResultSet rs) throws SQLException {
        List<RHH_POSTULADO> lista = new ArrayList<RHH_POSTULADO>();
        while (rs.next()) {
            RHH_POSTULADO objeto = new RHH_POSTULADO(con);
            objeto.setID(rs.getInt("ID"));
            objeto.setID_PERSONA(rs.getInt("ID_PERSONA"));
            objeto.setPASSWORD(rs.getString("PASSWORD"));
            lista.add(objeto);
        }
        return lista;
    }

    public int getID() {
        return ID;
    }

    public void setID(int ID) {
        this.ID = ID;
    }

    public int getID_PERSONA() {
        return ID_PERSONA;
    }

    public void setID_PERSONA(int ID_PERSONA) {
        this.ID_PERSONA = ID_PERSONA;
    }

    public String getPASSWORD() {
        return PASSWORD;
    }

    public void setPASSWORD(String PASSWORD) {
        this.PASSWORD = PASSWORD;
    }

    public Conexion getCon() {
        return this.con;
    }

    public void setCon(Conexion con) {
        this.con = con;
    }
}
